﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Collections;

/// <summary>
/// Descripción breve de GestionUsuarios
/// </summary>
public class GestionUsuarios
{
    static GestionUsuarios instance;
	private GestionUsuarios()
	{
	}
    public static GestionUsuarios getInstance()
    {
        if (instance == null)
        {
            instance = new GestionUsuarios();
        }
        return instance;
    }
    public String dameAlgo()
    {
        SqlConnection con = new SqlConnection();
        String resul = "";
        con.Open();
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from Usuarios", con);
            myReader = myCommand.ExecuteReader();
            if (myReader.Read())
            {
                Console.WriteLine(myReader["Alias"].ToString());
                Console.WriteLine(myReader["Password"].ToString());
                resul = myReader["Password"].ToString();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        con.Close();
        return resul;
    }

    public Usuario validar(String nick, String password)
    {
        Console.WriteLine("Validando...");
        if (nick == null || password == null || nick.Equals("") || password.Equals(""))
        {
            Console.WriteLine("error 1");
            return null;
        }
        else
        {
            Usuario usuario = null;
            
            SqlConnection con = Conexion.getConexion();
            con.Open();
            try
            {
                SqlDataReader myReader = null;
                SqlCommand myCommand = new SqlCommand("select * from Usuarios where Alias='"+nick+"'", con);
                myReader = myCommand.ExecuteReader();
                if (myReader.Read())
                {
                    if (!password.Equals(myReader["Password"]))
                    {
                        return null;
                    }
                    else
                    {
                        usuario = new Usuario();
                        usuario.setAlias(myReader["Alias"].ToString());
                        usuario.setIdUsuario(myReader["IdUsuario"].ToString());
                        DatosPersonales dp = new DatosPersonales();
                        dp.apellido1=myReader["Apellido1"].ToString();
                        dp.nombre = myReader["Nombre"].ToString();
                        dp.apellido2 = myReader["Apellido2"].ToString();
                        dp.fechaNacimiento = myReader["FechaNaci"].ToString().Substring(0,11);
                        dp.correo = myReader["Mail"].ToString();
                        dp.dni = myReader["DNI"].ToString();
                        dp.direccion = myReader["Direccion"].ToString();
                        dp.ciudad = myReader["Localidad"].ToString();
                        dp.telefono = myReader["Telefono"].ToString();
                        dp.sexo = myReader["Sexo"].ToString()[0];
                        usuario.setFechaBaja (myReader["FechaBaja"].ToString());
                        usuario.setSaldo(double.Parse(myReader["Saldo"].ToString()));
                        usuario.setDatosPersonales(dp);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return null;
            }
            con.Close();
            return usuario;
        }
    }

    public bool realizarIngreso(Usuario u, Double c)
    {
        if (u != null)
        {
            double saldo = dameSaldoUsuario(u);
            saldo = saldo + c;
            String saldoText = saldo.ToString();
            saldoText=saldoText.Replace(',', '.');
            SqlConnection con = Conexion.getConexion();
            con.Open();
            String SQL="UPDATE [casino].[dbo].[Usuarios]"+
                        " SET [Saldo] = "+saldoText+
                        " WHERE IdUsuario='"+u.getIdUsuario()+"'";
            SqlCommand comando = new SqlCommand(SQL,con);
            comando.ExecuteNonQuery();
            con.Close();
            u.setSaldo(saldo);
        }
        else
        {
            return false;
        }
        return true;
    
    }
    public double dameSaldoUsuario(Usuario u)
    {
        SqlConnection con = Conexion.getConexion();
        con.Open();
        double saldo=0;
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from Usuarios where IdUsuario='" + u.getIdUsuario() + "'", con);
            myReader = myCommand.ExecuteReader();
            if (myReader.Read())
            {
                saldo=double.Parse(myReader["Saldo"].ToString());

            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return 0;
        }
        con.Close();
        return saldo;
    }

    public Usuario dameUsuarioID(int id)
    {
        SqlConnection con = new SqlConnection();
        Usuario usuario = new Usuario();
        DatosPersonales dp = new DatosPersonales();
        con.Open();
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from Usuarios where IdUsuario='         "+ id + "'", con);
            myReader = myCommand.ExecuteReader();
            if (myReader.Read())
            {
                usuario.setAlias(myReader["Alias"].ToString());
                usuario.setFechaAlta(myReader["FechaAlta"].ToString());
                usuario.setIdUsuario(myReader["IdIsuario"].ToString());
                usuario.setPassword(myReader["Password"].ToString());
                String ss = myReader["Saldo"].ToString();
                double sal = Double.Parse(ss);
                usuario.setSaldo(sal);
                dp.apellido1=myReader["Apellido1"].ToString();
                dp.apellido2=myReader["Apellido2"].ToString();
                dp.nombre=myReader["Nombre"].ToString();
                string c = myReader["Sexo"].ToString();
                char a = c[0];
                dp.sexo = a;
                dp.dni= myReader["DNI"].ToString();
                dp.direccion= myReader["Direccion"].ToString();
                dp.correo= myReader["Mail"].ToString();
                dp.telefono= myReader["Telefono"].ToString();
                dp.ciudad= myReader["Localidad"].ToString();
                dp.fechaNacimiento=myReader["FechaNaci"].ToString();
                usuario.setDatosPersonales(dp);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return null;
        }
        con.Close();
        return usuario;
    }
    public Usuario dameUsuarioNick(String nick)
    {
        SqlConnection con = new SqlConnection();
        Usuario usuario = new Usuario();
        DatosPersonales dp = new DatosPersonales();
        con.Open();
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from Usuarios where Alias='" + nick + "'", con);
            myReader = myCommand.ExecuteReader();
            if (myReader.Read())
            {
                usuario.setAlias(myReader["Alias"].ToString());
                usuario.setFechaAlta(myReader["FechaAlta"].ToString());
                usuario.setIdUsuario(myReader["IdIsuario"].ToString());
                usuario.setPassword(myReader["Password"].ToString());
                String ss = myReader["Saldo"].ToString();
                double sal= Double.Parse(ss);
                usuario.setSaldo(sal);
                dp.apellido1=myReader["Apellido1"].ToString();
                dp.apellido2=myReader["Apellido2"].ToString();
                dp.nombre=myReader["Nombre"].ToString();
                string c = myReader["Sexo"].ToString();
                char a = c[0];
                dp.sexo = a;
                dp.dni= myReader["DNI"].ToString();
                dp.direccion= myReader["Direccion"].ToString();
                dp.correo= myReader["Mail"].ToString();
                dp.telefono= myReader["Telefono"].ToString();
                dp.ciudad= myReader["Localidad"].ToString();
                dp.fechaNacimiento= myReader["FechaNaci"].ToString();
                usuario.setDatosPersonales(dp);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return null;
        }
        con.Close();
        return usuario;
    }


    public ArrayList getListaUsuarios()

    {
        Usuario usuario = null;
        ArrayList lista = new ArrayList();
        SqlConnection con = Conexion.getConexion();
        con.Open();
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from Usuarios", con);
            myReader = myCommand.ExecuteReader();
            while(myReader.Read())
            {
                usuario = new Usuario();
                usuario.setAlias(myReader["Alias"].ToString());

                DatosPersonales dp = new DatosPersonales();
                dp.apellido1 = myReader["Apellido1"].ToString();
                dp.nombre = myReader["Nombre"].ToString();
                dp.apellido2 = myReader["Apellido2"].ToString();
                dp.fechaNacimiento = myReader["FechaNaci"].ToString();
                dp.correo = myReader["Mail"].ToString();
                usuario.setDatosPersonales(dp);
                lista.Add(usuario);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return null;
        }
        con.Close();
        return lista;
    }

    public bool crearUsuario(Usuario u)
    {
        if (u != null)
        {
            SqlConnection con = Conexion.getConexion();
            con.Open();
            SqlCommand comando = new SqlCommand("INSERT INTO [casino].[dbo].[Usuarios]"+
           "([Alias],[Password],[Nombre],[Apellido1],[Apellido2],[Direccion],[Localidad],[Telefono],[Mail],[FechaNaci],[Sexo],[DNI],[FechaBaja],[FechaAlta])"+
           "VALUES"+
           "('"+u.getAlias()+"'"+
           ",'"+u.getPassword()+"'"+
           ",'"+u.getDatosPersonales().nombre+"'"+
           ",'"+u.getDatosPersonales().apellido1+"'"+
           ",'"+u.getDatosPersonales().apellido2+"'"+
           ",'"+u.getDatosPersonales().direccion+"'"+
           ",'"+u.getDatosPersonales().ciudad+"'"+
           ",'"+u.getDatosPersonales().telefono+"'"+
           ",'"+u.getDatosPersonales().correo+"'"+
           ",'"+u.getDatosPersonales().fechaNacimiento+"'"+
           ",'"+u.getDatosPersonales().sexo+"'"+
           ",'"+u.getDatosPersonales().dni+"'"+
           ",null"+
           ",'"+DateTime.Now.ToShortDateString()+"')",con);

            int i=comando.ExecuteNonQuery();
            con.Close();

        }
        else
        {
            return false;
        }
        return true;
    }
}
